• 安全相关
    • 安全开发指导
    • 禁止访问敏感目录" level="2">禁止访问敏感目录
    • 修复1.1.0之前的一处安全隐患" level="2">修复1.1.0之前的一处安全隐患

    安全相关

    永远不要相信用户提交的数据!

    安全开发指导

    • 参考ThinkPHP官方安全指导

    • 过滤用户输入的内容,DolphinPHP从1.0.5版本开始提供了html安全过滤方法htmlpurifier()

      比如:$html = htmlpurifier(request()->post('content'))

      或者:$html = request()->post('content', '', 'htmlpurifier')

      也可以加在TP的默认过滤规则,如何设置默认过滤规则请参考ThinkPHP官方文档

    • 前端过滤可以使用filterXSS()

    1. <script>
    2. // apply function filterXSS in the same way
    3. var html = filterXSS('<script>alert("xss");</scr' + 'ipt>');
    4. alert(html);
    5. </script>

    更多用法,请参考:https://github.com/leizongmin/js-xss/blob/master/README.zh.md

    以上方法仅作为安全辅助,没有一劳永逸的方法可以防止所有攻击。要做好数据检查,选用合适的过滤方法。

    禁止访问敏感目录" class="reference-link">禁止访问敏感目录

    由于框架将入口文件从public移动到了应用目录,使一些不该被访问的目录也暴露了出来。如果将入口文件移动到public目录,需要改动的地方比较多,所以不建议这样做。

    为了安全考虑,可以将一些敏感目录设置为禁止访问。

    【Nginx】

    在Nginx配置文件中,加入以下规则

    1. location ^~ /data {
    2. deny all;
    3. }
    4. location ^~ /runtime {
    5. deny all;
    6. }
    7. location ^~ /export {
    8. deny all;
    9. }
    10. location ^~ /application {
    11. deny all;
    12. }
    13. location ^~ /plugins {
    14. deny all;
    15. }
    16. location ^~ /thinkphp {
    17. deny all;
    18. }
    19. location ^~ /vendor {
    20. deny all;
    21. }

    【Apache】

    在框架根目录的.htaccess文件加入以下规则

    1. RewriteRule ^data - [F,L]
    2. RewriteRule ^runtime - [F,L]
    3. RewriteRule ^export - [F,L]
    4. RewriteRule ^application - [F,L]
    5. RewriteRule ^plugins - [F,L]
    6. RewriteRule ^thinkphp - [F,L]
    7. RewriteRule ^vendor - [F,L]

    完整内容

    1. <IfModule mod_rewrite.c>
    2. Options +FollowSymlinks -Multiviews
    3. RewriteEngine On
    4. RewriteCond %{REQUEST_FILENAME} !-d
    5. RewriteCond %{REQUEST_FILENAME} !-f
    6. RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    7. RewriteRule ^data - [F,L]
    8. RewriteRule ^runtime - [F,L]
    9. RewriteRule ^export - [F,L]
    10. RewriteRule ^application - [F,L]
    11. RewriteRule ^plugins - [F,L]
    12. RewriteRule ^thinkphp - [F,L]
    13. RewriteRule ^vendor - [F,L]
    14. </IfModule>

    修复1.1.0之前的一处安全隐患" class="reference-link">修复1.1.0之前的一处安全隐患

    如果您的框架没有升级到1.1.0以上,请按以下方法修复一处文件上传隐患,主要是由于超级管理可以上传php文件,一般超级管理账号密码没有泄露是不会有问题的,但还是建议大家修复这个问题。

    打开application\admin\controller\Attachment.php 大概217行,将

    安全相关 - 图1

    修改为

    1. if (preg_grep("/php/i", $ext_limit)) {
    2. $error_msg = '禁止上传非法文件!';
    3. }
    4. if (!preg_grep("/$file_ext/i", $ext_limit)) {
    5. $error_msg = '附件类型不正确!';
    6. }